//1.引入express模块
const express = require("express")
var indexRouter = require("./routers/indexRouter.js"); // 引入首页路由
var usersRouter = require("./routers/usersRouter.js"); // 引入用户路由
var categoriesRouter = require("./routers/categoriesRouter.js"); // 引入用户路由
var postRouter = require("./routers/postRouter.js") // 引入文章路由
var commentsRouter = require("./routers/commentsRouter.js") // 引入评论路由
var navMenusRouter = require("./routers/navMenusRouter.js") // 引入导航菜单路由
var bodyParser = require("body-parser"); // 引入获取post请求的数据模块中间件
var session = require("express-session") // 引入session模块
var multer = require("multer") // 引入接收二进制数据模块

//2.创建express实例对象
var app = express()

//6.注册bodyParse中间件.用来接收Post请求传输的数据, extended:false 表示不需要扩展解析方式, 可以直接使用node内置的数据解析方法, 可以使用req.body来获取post提交的数据
app.use(bodyParser.urlencoded({extended:false}))

//7.注册session中间件,给req添加了一个session属性,通过req,session()方法可获取session信息
app.use(session({
    secret: "keyboard cat",  // 设置一个加密的字符串,可自定义
    resave: false,   // 设置是否强制写入存储区
    saveUninitialized: false  // 第一次请求,是否响应给sessionID
}))

//8.注册multer中间件,给req添加了一个file属性,通过req.file()属性可以获取二进制传输的数据
// app.use(multer({dest:"/tmp/"}).single("avatar")) 

//4. 使用模板引擎
app.set("view engine", "ejs"); // 设置模板引擎为ejs
app.set("views","./views/"); // 设置模板视图文件为 views

//5.设置静态资源托管
app.use("/assets",express.static("assets")); // 设置静态文件托管文件为assets
app.use("/uploads",express.static("uploads")); // 设置静态上传文件托管路径为upload

//3.创建服务并监听端口
app.listen(3000,()=>{
    console.log("express server is running at http://127.0.0.1:3000")
})

//4.注册中间件
app.use(indexRouter); // 注册加载首页路由
app.use(usersRouter); // 注册加载用户路由
app.use(categoriesRouter); // 注册加载用户路由
app.use(postRouter) // 注册加载文章路由
app.use(commentsRouter) // 注册评论路由中间件
app.use(navMenusRouter) // 注册导航菜单路由中间件

 /**
  * 隐藏域:
  * 1. 隐藏域的好处就是可以存储数据而不在页面中有结构的显示 
  * 
  * 模板：
  * 1. 使用模板渲染数据，相当于是动态的创建元素
  * 2. 对于模板里面元素的事件注册，一定要使用委托的方式来注册事件
  * 3. 也就是说一定要注册给原来不是模板渲染出来的标签,然后通过模板中的标签来触发
  * 4. 模板渲染出来的数据或是结构通过查看源代码看不到具体的样式,因为是在内存中生成的
  * 5. 可以使用审查元素的方式来查看具体结构样式 
  */